/**
 * @name: uni.request、uni.uploadFile封装
 * @date: 2020.3.5
 */
import Vue from 'vue'

var _this = new Vue();

//请求失败后的操作
function deal(res) {
	if(res.code === 506 || res.code === 507) {
		_this.$store.commit('logout');
		uni.showModal({
		    content: '您的登录状态已失效，请重新登录',
		    success: (rs) => {
		        if(rs.confirm) {
					_this.$store.commit('goLogin', true);
					_this.$navigateTo('/pages/login/index');
				}
		    }
		});
	} else {
		_this.$showToast(res.msg);
	}
}

/**
 * <option> 网络请求参数,具体如下：
 * 1、普通请求 -----------------------------
 * url 请求网络路径，非上传时必须，上传时可空
 * data 请求的参数，可空
 * loading 是否显示loading加载弹窗，0-不显示
 * 2、上传操作 -----------------------------
 * upload 是否为上传操作，默认为false，可空
 * filePath 上传时，文件缓存路径，上传时必须
 */
const http = (option) => {
	return new Promise((resolve, reject) => {
		
		if(option.loading !== 0) {
			uni.showLoading({
				mask: true,
				title: '加载中...'
			});
		}
		
		//request请求
		if(!option.upload) {
			//非上传操作
			uni.request({
				method: 'POST',
				header: {
					'token':  uni.getStorageSync('token'),
					'content-type': 'application/x-www-form-urlencoded'
				},
				url: option.url,
				data: option.data,
				success: (obj) => {
					uni.hideLoading();
					let res = obj.data;
					if(res.code === 200) {
						resolve(res.ret);
					} else {
						deal(res);
					}
				},
				fail: (err) => {
					reject(err.data);
					uni.hideLoading();
					_this.$showToast('未连接到服务器，请稍后重试');
				},
				complete: () => {
					uni.stopPullDownRefresh();
					_this.$store.commit('btmLoad', false);
				}
			});
		} else {
			//上传操作
			uni.uploadFile({
				header: {
					'token': _this.$store.state.token,
					'content-type': 'multipart/form-data'
				},
				url: _this.$api.userUrl + 'uploadImg',
				filePath: option.filePath,
				name: 'fileImg',
				success: (obj) => {
					uni.hideLoading();
					let str = JSON.stringify(obj.data);
					str = str.substr(1, str.length - 2);
					str = str.replace(/\\"/g, '"');
					str = str.replace(/\\r/g, '');
					str = str.replace(/\\n/g, '');
					let res = JSON.parse(str);
					if(res.code === 200) {
						resolve(res.ret);
					} else {
						deal(res);
					}
				},
				fail: (err) => {
					reject(err.data);
					uni.hideLoading();
					_this.$showToast('未连接到服务器，请稍后重试');
				}
			});
		}
		
	});
}

Vue.prototype.$http = http;
